Add trkseg support to Garmin track reader.
authorrobertl <robertl>
Wed, 14 Apr 2010 12:58:45 +0000 (12:58 +0000)
committerrobertl <robertl>
Wed, 14 Apr 2010 12:58:45 +0000 (12:58 +0000)
garmin.c

index 62cf3fca0b36cc857e70fe31158ccaa4ee5a20fa..1aeadfd16c616ac368759e337afd6707c66bc712 100644 (file)
--- a/garmin.c
+++ b/garmin.c
@@ -422,11 +422,10 @@ track_read(void)
        route_head *trk_head = NULL;
        int trk_num = 0;
        int i;
-       int trk_seg_num = 1;
-       char trk_seg_num_buf[10];
        char *trk_name = "";
        GPS_PLap* laps = NULL;
        int nlaps = 0;
+       int next_is_new_trkseg = 0;
 
        if (gps_lap_type != -1) {
                nlaps = GPS_Command_Get_Lap(portname, &laps, &lap_read_nop_cb);
@@ -450,27 +449,22 @@ track_read(void)
                        trk_name = array[i]->trk_ident;
                        if (!trk_name)
                                trk_name = "";
-                       trk_seg_num = 1;
                }
 
-
-               if (trk_head == NULL || array[i]->ishdr
-                   || (array[i]->tnew && i > 0 && !array[i - 1]->ishdr)) {
+               if (trk_head == NULL || array[i]->ishdr) {
                        trk_head = route_head_alloc();
                        trk_head->rte_num = trk_num;
-                       if (trk_seg_num == 1) {
-                               trk_head->rte_name = xstrdup(trk_name);
-                       } else {
-                               /* name in the form TRACKNAME #n */
-                               snprintf(trk_seg_num_buf, sizeof(trk_seg_num_buf), "%d", trk_seg_num);
-                               trk_head->rte_name = xmalloc(strlen(trk_name)+strlen(trk_seg_num_buf)+3);
-                               sprintf(trk_head->rte_name, "%s #%s", trk_name, trk_seg_num_buf);
-                       }
-                       trk_seg_num++;
+                       trk_head->rte_name = xstrdup(trk_name);
                        trk_num++;
                        track_add_head(trk_head);
                }
 
+               /* Need to do this here because fitness devices set tnew
+                * on a trackpoint without lat/lon.
+                */
+               if (array[i]->tnew)
+                       next_is_new_trkseg = 1;
+
                if (array[i]->no_latlon || array[i]->ishdr) {
                        continue;
                }
@@ -485,6 +479,9 @@ track_read(void)
                wpt->creation_time = array[i]->Time;
                 wpt->wpt_flags.is_split = checkWayPointIsAtSplit(wpt, laps,
                                                                  nlaps);
+                wpt->wpt_flags.new_trkseg = next_is_new_trkseg;
+                next_is_new_trkseg = 0;
+
                if (array[i]->dpth < 1.0e25f)
                        WAYPT_SET(wpt, depth, array[i]->dpth);
                if (array[i]->temperature_populated)